package codes

import (
	"context"

	"google.golang.org/grpc/codes"
	"google.golang.org/grpc/status"
)

// Acceptable checks if given error is acceptable.
func Acceptable(err error) bool {
	switch status.Code(err) {
	case codes.DeadlineExceeded, codes.Internal, codes.Unavailable, codes.DataLoss:
		return false
	case codes.Unknown:
		return acceptableUnknown(err)
	default:
		return true
	}
}

func acceptableUnknown(err error) bool {
	switch err {
	case context.DeadlineExceeded:
		return false
	default:
		return true
	}
}
